/**
 * JWT工具类
 */
const jwtUtil = {
    /**
     * 解析JWT token
     * @param {string} token JWT token
     * @returns {object} 解析后的payload
     */
    parseToken(token) {
        try {
            if (!token) {
                console.error('JWT token为空');
                return null;
            }
            
            console.log('开始解析JWT token:', token);
            
            // JWT token格式: header.payload.signature
            const parts = token.split('.');
            console.log('JWT parts数量:', parts.length);
            
            if (parts.length !== 3) {
                console.error('JWT格式错误，parts数量:', parts.length);
                return null;
            }
            
            // 解码payload部分
            const payload = parts[1];
            console.log('JWT payload部分:', payload);
            
            // 使用更安全的方式解码Base64，支持中文字符
            const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');
            const decoded = decodeURIComponent(escape(atob(base64)));
            console.log('解码后的payload:', decoded);
            
            const result = JSON.parse(decoded);
            console.log('解析后的JWT数据:', result);
            return result;
        } catch (error) {
            console.error('JWT解析失败:', error);
            return null;
        }
    },
    
    /**
     * 从token中获取用户ID
     * @param {string} token JWT token
     * @returns {number|null} 用户ID
     */
    getUserId(token) {
        const payload = this.parseToken(token);
        console.log('getUserId - 解析的payload:', payload);
        if (payload && payload.claims) {
            console.log('getUserId - 找到claims:', payload.claims);
            console.log('getUserId - 用户ID:', payload.claims.id);
            return payload.claims.id;
        }
        console.log('getUserId - 未找到用户ID');
        return null;
    },
    
    /**
     * 从token中获取用户名
     * @param {string} token JWT token
     * @returns {string|null} 用户名
     */
    getUserName(token) {
        const payload = this.parseToken(token);
        if (payload && payload.claims) {
            return payload.claims.name;
        }
        return null;
    }
};

export default jwtUtil;
